#include "bsp_uart.h"

#if uart0_enable
UART_Type uart0;

#endif
#if uart1_enable
UART_Type uart1;
#endif
#if uart2_enable
UART_Type uart2;
#endif
#if uart3_enable
UART_Type uart3;
#endif

#if uart0_enable
/***********************************************
函数名称：bsp_uart0_init
函数参数：bound波特率
函数意义：串口0初始化
函数返回ֵ：无
*************************************************/

void bsp_uart0_init(uint32_t bound)
{
	UART_CFG_Type UARTConfigStruct;
	UART_FIFO_CFG_Type UARTFIFOConfigStruct;
	PINSEL_CFG_Type PinCfg;

	PinCfg.Funcnum = PINSEL_FUNC_1;					//引脚功能，查表获取
	PinCfg.Portnum = PINSEL_PORT_0;					//指定引脚端口
	PinCfg.Pinnum = PINSEL_PIN_3;					//GPIO0_3
	PINSEL_ConfigPin(&PinCfg);						//设置引脚
	PinCfg.Pinnum = PINSEL_PIN_2;					//GPIO0_2
	PINSEL_ConfigPin(&PinCfg);						//设置引脚
	UARTConfigStruct.Baud_rate = bound;				//波特率
	UARTConfigStruct.Databits=UART_DATABIT_8;		//数据位
	UARTConfigStruct.Parity=UART_PARITY_NONE;		//校验位
	UARTConfigStruct.Stopbits=UART_STOPBIT_1;		//停止位
	
	UART_Init(LPC_UART0, &UARTConfigStruct);		//初始化串口
	/* Initialize FIFOConfigStruct to default state:
	 * 				- FIFO_DMAMode = DISABLE
	 * 				- FIFO_Level = UART_FIFO_TRGLEV0
	 * 				- FIFO_ResetRxBuf = ENABLE
	 * 				- FIFO_ResetTxBuf = ENABLE
	 * 				- FIFO_State = ENABLE
	 */
	UART_FIFOConfigStructInit(&UARTFIFOConfigStruct);

	// Initialize FIFO for UART0 peripheral
	UART_FIFOConfig((LPC_UART_TypeDef *)LPC_UART0, &UARTFIFOConfigStruct);

	UART_TxCmd(LPC_UART0, ENABLE);					//使能发送

	/* Enable UART Rx interrupt */
	UART_IntConfig((LPC_UART_TypeDef *)LPC_UART0, UART_INTCFG_RBR, ENABLE);
	/* Enable UART line status interrupt */
	UART_IntConfig((LPC_UART_TypeDef *)LPC_UART0, UART_INTCFG_RLS, ENABLE);

	NVIC_SetPriority(UART0_IRQn, ((0x01<<3)|0x01));	//设置中断优先级
	NVIC_EnableIRQ(UART0_IRQn);

}
/***********************************************
函数名称：UART0_Send
函数参数：ch要发送的字符，len要发送的长度
函数意义：串口0发送函数
函数返回ֵ：无
*************************************************/
void UART0_Send(uint8_t *ch,uint16_t len)
{
	uint16_t i = 0;
	for(i=0;i<len;i++)
	{
		while (!(UART_GetLineStatus(LPC_UART0) & UART_LSR_THRE));   //等待发送完成
		UART_SendByte(LPC_UART0,*(ch+i));
	}
	
}
/***********************************************
函数名称：UART0_IRQHandler
函数参数：无
函数意义：串口0中断接收
函数返回ֵ：无
*************************************************/
void UART0_IRQHandler(void)
{
	uint32_t flag;
	flag = UART_GetIntId(LPC_UART0);//读取中断
	flag = flag&UART_IIR_INTID_MASK;
	if(flag == UART_IIR_INTID_RDA)//接收中断
	{
		
	   	uart0.rx_buf[uart0.rx_len++]=UART_ReceiveByte(LPC_UART0);//读取数据
	}
	else if(flag == UART_IIR_INTID_CTI)//超时中断
	{
		uart0.flag = 1;
	}
}
#endif

#if uart1_enable
/***********************************************
函数名称：bsp_uart1_init
函数参数：bound波特率
函数意义：串口0初始化
函数返回ֵ：无
*************************************************/

void bsp_uart1_init(uint32_t bound)
{
	UART_CFG_Type UARTConfigStruct;
	UART_FIFO_CFG_Type UARTFIFOConfigStruct;
	PINSEL_CFG_Type PinCfg;

	PinCfg.Funcnum = 2;					//引脚功能，查表获取
	PinCfg.Portnum = 2;					//指定引脚端口
	PinCfg.OpenDrain = 0;
	PinCfg.Pinmode = 0;
	PinCfg.Pinnum = 0;					//GPIO0_3
	PINSEL_ConfigPin(&PinCfg);						//设置引脚
	PinCfg.Pinnum = 1;					//GPIO0_2
	PINSEL_ConfigPin(&PinCfg);						//设置引脚
	
	UARTConfigStruct.Baud_rate = bound;				//波特率
	UARTConfigStruct.Databits=UART_DATABIT_8;		//数据位
	UARTConfigStruct.Parity=UART_PARITY_NONE;		//校验位
	UARTConfigStruct.Stopbits=UART_STOPBIT_1;		//停止位
	
	UART_Init((LPC_UART_TypeDef *)LPC_UART1, &UARTConfigStruct);		//初始化串口
	/* Initialize FIFOConfigStruct to default state:
	 * 				- FIFO_DMAMode = DISABLE
	 * 				- FIFO_Level = UART_FIFO_TRGLEV0
	 * 				- FIFO_ResetRxBuf = ENABLE
	 * 				- FIFO_ResetTxBuf = ENABLE
	 * 				- FIFO_State = ENABLE
	 */
	UART_FIFOConfigStructInit(&UARTFIFOConfigStruct);

	// Initialize FIFO for UART0 peripheral
	UART_FIFOConfig((LPC_UART_TypeDef *)LPC_UART1, &UARTFIFOConfigStruct);

	

	/* Enable UART Rx interrupt */
	UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART_INTCFG_RBR, ENABLE);
//	/* Enable UART line status interrupt */
//	UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART_INTCFG_RLS, ENABLE);

	NVIC_SetPriority(UART1_IRQn, ((0x01<<3)|0x01));	//设置中断优先级
	NVIC_EnableIRQ(UART1_IRQn);
	UART_TxCmd((LPC_UART_TypeDef *)LPC_UART1, ENABLE);					//使能发送
}
/***********************************************
函数名称：UART1_Send
函数参数：ch要发送的字符，len要发送的长度
函数意义：串口0发送函数
函数返回ֵ：无
*************************************************/
void UART1_Send(uint8_t *ch,uint16_t len)
{
	uint16_t i = 0;
	for(i=0;i<len;i++)
	{
//		while (!(UART_GetLineStatus((LPC_UART_TypeDef *)LPC_UART1) & UART_LSR_THRE));   //等待发送完成
		UART_SendByte((LPC_UART_TypeDef *)LPC_UART1,*(ch+i));
		while (!(UART_GetLineStatus((LPC_UART_TypeDef *)LPC_UART1) & UART_LSR_THRE));   //等待发送完成
	}
}
/***********************************************
函数名称：UART1_IRQHandler
函数参数：无
函数意义：串口1中断接收
函数返回ֵ：无
*************************************************/
uint8_t recv_con = 0;
void UART1_IRQHandler(void)
{
//	uint32_t dat = 0;
//	while ((LPC_UART1->IIR & 0x01) == 0)
//	{
//		dat = LPC_UART1->IIR & 0x0E;
//		switch (dat)
//		{
//			
//			case 0x04:
//			{
//				if (uart1.rx_len==0)
//				{
//					uart1.rx_buf[uart1.rx_len]=LPC_UART1->RBR;
//					if (uart1.rx_buf[uart1.rx_len]==addr )
//					{
//						uart1.rx_len++;
//					}
//				}
//				else if (uart1.rx_len==1)
//				{
//					uart1.rx_buf[uart1.rx_len]=LPC_UART1->RBR;
//					switch(uart1.rx_buf[uart1.rx_len])
//					{
//						case 0x01:
//							recv_con=7;
//							uart1.rx_len++;
//							break;
//						case 0x02:
//							recv_con=7;
//							uart1.rx_len++;
//							break;
//						case 0x03:
//							recv_con=6;
//							uart1.rx_len++;
//							break;
//						case 0x04:
//							recv_con=7;
//							uart1.rx_len++;
//							break;
//						default:
//							recv_con=0;
//							uart1.rx_len=0;
//							break;
//					}		
//				}
//				else
//				{
//					uart1.rx_buf[uart1.rx_len]=LPC_UART1->RBR;
//					if(uart1.rx_len<(recv_con-1))
//						uart1.rx_len++;
//					else
//					{
//						uart1.flag = 1;
//					}
//				}
//			}break;
//			case 0x06:LPC_UART1->LSR;break;
//			
//		}
	uint32_t flag;
	uint8_t tmp = 0;
	flag = LPC_UART1->IIR & 0x03CF;//UART_GetIntId((LPC_UART_TypeDef *)LPC_UART1);//读取中断
	flag = flag&(7<<1);
	if(flag == UART_IIR_INTID_RDA)//接收中断
	{
		if (uart1.rx_len==0)
		{
			uart1.rx_buf[uart1.rx_len]=LPC_UART1->RBR;
			if ((uart1.rx_buf[uart1.rx_len]==1 )||(uart1.rx_buf[uart1.rx_len]==0x31 ))
			{
				uart1.flag=1;
				uart1.rx_len = 0;
			}
		}
	}
	else if(flag == UART_IIR_INTID_RLS)
	{
		tmp = LPC_UART1->LSR;
		tmp = tmp;
	}
}
#endif
#if 0
/*低位字节表*/
static uint16_t auchCRCLo[]={
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
	0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
	0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
	0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
	0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
	0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
	0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
	0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
	0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
	0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
	0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
	0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
	0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
	0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
	0x40
};

/*高位字节表*/
static uint16_t auchCRCHi[]={
	0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
	0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
	0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
	0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
	0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
	0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
	0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
	0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
	0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
	0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
	0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
	0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
	0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
	0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
	0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
	0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
	0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
	0x40
};
/*********************************************************************************************************
** 函数名称:    CheckCRC_3
** 功能描述:    循环冗余校验
** 输    入:	*pushMsg要校验的数组指针,usDatalen数组长度
** 输    出:	无
** 返    回:    checkData
*********************************************************************************************************/
unsigned int crc16(unsigned char* puchMsg,unsigned char usDataLen)
{
	uint8_t uchCRCHi = 0xff;
	uint8_t uchCRCLo = 0xff;
	uint8_t uIndex = 0;
	while (usDatalen--)
	{
		uIndex = uchCRCLo ^ *pushMsg++;
		uchCRCLo = uchCRCHi^auchCRCLo[uIndex];
		uchCRCHi = auchCRCHi[uIndex];
	}
	return ((uchCRCHi<<8) | uchCRCLo);
}
#else
const unsigned char auchCRCHi[] = {
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
	0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
	0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
	0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
	0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
	0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
	0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
	0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
	0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
	0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
	0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
	0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
	0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
	0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
	0x40
};

/* Table of CRC values for low-order unsigned char    */
const unsigned char auchCRCLo[] = {
	0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
	0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
	0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
	0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
	0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
	0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
	0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
	0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
	0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
	0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
	0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
	0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
	0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
	0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
	0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
	0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
	0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
	0x40
};


unsigned int crc16(unsigned char* puchMsg,unsigned char usDataLen)
{
	unsigned char uchCRCHi = 0xFF ;
	unsigned char uchCRCLo = 0xFF ;
	unsigned int  uIndex  ;
	while (usDataLen--)
	{
		uIndex   = uchCRCHi ^ *puchMsg++;
		uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
		uchCRCLo = auchCRCLo[uIndex] ;
	}
	return (((unsigned int)(uchCRCHi) << 8) | uchCRCLo) ;
}
#endif
